interface _CA_ {
    /**
     * 截取数组
     * @param arr 数组
     * @param direction <false> true: 从前开始截取; false: 从后开始截取;
     * @param cnt <0> 截取长度
     * @returns 新数组
     * @description 返回的新数组长度一定是指定的截取长度，如超出已有数组，则补0。
     */
    extract<T>(arr: Array<T>, direction: boolean, cnt: number): Array<T>;
}
{
    Object.defineProperty(_CA_.prototype, 'extract', {
        writable: false,
        configurable: false,
        enumerable: false,
        value: function (arr: Array<any>, direction: boolean = false, cnt: number = 0) {
            if (cnt <= 0) { return []; }
            if (cnt < arr.length) {// 截取范围内
                return direction ? arr.slice(0, cnt) : arr.slice(-cnt);
            } else {// 超出已有数组
                if (direction) {
                    const result = [...arr];
                    for (let i = 0; i < cnt - arr.length; i++) {
                        result.push(0);
                    }
                    return result;
                } else {
                    const result = [...arr];
                    for (let i = 0; i < cnt - arr.length; i++) {
                        result.unshift(0);
                    }
                    return result;
                }
            }
        }
    });
}
